Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add command to convert 1.8 hash syntax into new alternate (hashrocket-free) syntax #19

Merged
merged 2 commits into from Oct 11, 2011

Conversation

whatcould
Copy link
Contributor

To either annoy or placate other developers you're working with, depending on their syntax preference.

  • Converts current line or selected text
  • Uses option-command-= for shortcut key (shortcut for hash-rocket is control-L, but that seemed more ergonomic than memorable).

* Uses option-command-equals for shortcut key
* Converts current line or selected text
@JEG2
Copy link
Contributor

JEG2 commented Oct 10, 2011

I think it's handy to have a command like this, but I think we should make it toggle between the old and new styles. This makes it fit better with commands like Ruby → Toggle String / Symbol and Source → Toggle *.

If we do make that change, it looks the the toggle commands usually use a keyboard shortcut of ⌃ plus some meaningful character. ⌃: and ⌃{ are taken, so maybe we could use your = but with ⌃ for ⌃=.

Thoughts?

@whatcould
Copy link
Contributor Author

Right, I thought of htat but then I'd have to figure out how to write a regex to toggle back from the new syntax to the old!

The hashrocket syntax is pretty straightforward, but the new syntax is a lot harder to reliably match, since colons are in regular use. Take this hash, for example:

{book: "A Book Title: A book subtitle", sentence: "Some may say: try harder"}

Guess I'd just have to ignore colons within strings? I'd have to think about that for a bit.

@JEG2
Copy link
Contributor

JEG2 commented Oct 10, 2011

Yeah. You could have TextMate pass you the scope delimited content, but I'm not sure that's even needed in this case. This gets us reasonably close, I think:

>> %q{{book: "A Book Title: A book subtitle", sentence: 'Some may \'say: try harder\'', number: 1_024, var: var, method: m(1, 2, 3)}}.gsub(/\G(\{|,\s*)(\w+):(\s*(?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\w+\([^)]*\)|[^,]+))/
=> "{:book => \"A Book Title: A book subtitle\", :sentence => 'Some may \\'say: try harder\\'', :number => 1_024, :var => var, :method => m(1, 2, 3)}"

@whatcould
Copy link
Contributor Author

Wow, that's impressive. I think you're missing some of the command? The second param to gsub is missing.

@JEG2
Copy link
Contributor

JEG2 commented Oct 11, 2011

Sorry, I'm not sure how that got cut off:

gsub(/\G(\{|,\s*)(\w+):(\s*(?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\w+\([^)]*\)|[^,]+))/, "\\1:\\2 =>\\3")

@whatcould
Copy link
Contributor Author

Ok, thanks, that is amazing. Works great. I changed it to toggle and switched the shortcut to ^=

I had to tweak it a bit -- for the toggles it's nice to have it do the whole line, and hashes don't necessarily start with { either. I suppose there might be a case where it doesn't work, but for every case in my current project it worked great, including Selecting all and hitting ^=.

JEG2 added a commit that referenced this pull request Oct 11, 2011
Add command to convert 1.8 hash syntax into new alternate (hashrocket-free) syntax
@JEG2 JEG2 merged commit b6a4c65 into textmate:master Oct 11, 2011
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants